가상 CPU 스케줄링
1. 개요
1. 개요
가상 CPU 스케줄링은 가상화 환경에서 물리적인 CPU 자원을 여러 가상 머신에 효율적으로 분배하고 관리하는 핵심 메커니즘이다. 이 기술은 단일 물리적 서버 상에서 다수의 가상 머신이 동시에 실행될 수 있도록 하며, 각 가상 머신은 마치 전용 CPU를 보유한 것처럼 운영된다. 하이퍼바이저 또는 가상 머신 모니터는 이 스케줄링을 담당하는 핵심 소프트웨어 계층이다.
가상 CPU 스케줄링의 주요 목표는 공평성, 효율성, 성능 격리를 달성하는 것이다. 즉, 모든 가상 머신이 설정된 자원 할당량에 따라 공정하게 CPU 시간을 받도록 하고, 물리적 CPU의 유휴 시간을 최소화하며, 한 가상 머신의 과도한 부하가 다른 가상 머신의 성능에 영향을 미치지 않도록 보장한다. 이를 통해 서버 통합과 자원 활용도 향상이라는 가상화의 핵심 이점을 실현할 수 있다.
이 스케줄링은 운영체제의 프로세스 스케줄링과 유사한 원리를 가지지만, 더 복잡한 계층 구조를 다룬다. 하이퍼바이저는 먼저 물리적 CPU 코어를 가상 CPU들 사이에 스케줄링하고, 그 후 각 가상 머신 내부의 게스트 운영체제가 자신에게 할당된 가상 CPU 시간을 다시 해당 가상 머신 내의 애플리케이션 프로세스에 분배하는 이중 계층 구조를 형성한다.
2. 가상 CPU 스케줄링의 개념과 필요성
2. 가상 CPU 스케줄링의 개념과 필요성
가상 CPU 스케줄링은 하이퍼바이저가 물리적 CPU 코어를 여러 가상 머신이 공유할 수 있도록 가상 CPU 자원을 할당하고 관리하는 핵심 메커니즘이다. 단일 물리적 서버에서 다수의 가상 머신이 동시에 실행되는 가상화 환경에서는, 제한된 물리적 CPU 자원을 효율적이고 공정하게 분배하는 것이 필수적이다. 이 스케줄링이 없으면 한 가상 머신이 CPU를 독점하여 다른 가상 머신의 성능에 심각한 영향을 미칠 수 있다.
물리적 CPU와 가상 CPU의 관계는 일대다 매핑으로 이해할 수 있다. 각 가상 머신은 하나 이상의 가상 CPU를 갖지만, 이들은 실제로는 소수의 물리적 CPU 코어에 의해 시간을 나누어 실행된다. 하이퍼바이저의 스케줄러는 가상 CPU 스레드를 물리적 코어에 할당할 실행 순서와 시간을 결정한다. 이 과정은 매우 빠른 주기로 반복되어, 사용자에게는 각 가상 머신이 전용 CPU를 보유한 것 같은 착각을 제공한다.
가상 CPU 스케줄링의 필요성은 자원 격리, 성능 보장, 그리고 전체 시스템 효율성 향상에서 비롯된다. 서로 다른 중요도와 성능 요구사항을 가진 워크로드(예: 데이터베이스 서버와 웹 서버)가 동일한 호스트에서 실행될 때, 스케줄링 정책을 통해 CPU 시간을 차별적으로 배분할 수 있다. 이를 통해 서비스 수준 계약을 준수하고, 자원 활용도를 극대화하며, 시스템의 전체 처리량을 높일 수 있다.
2.1. 가상화 환경에서의 CPU 자원 관리
2.1. 가상화 환경에서의 CPU 자원 관리
가상화 환경에서 하이퍼바이저는 물리적 CPU 자원을 여러 가상 머신에 공정하고 효율적으로 분배하는 핵심적인 역할을 수행한다. 이 과정에서 가상 CPU 스케줄링은 필수적인 메커니즘이다. 물리 서버 한 대에서 수십 개의 가상 머신이 동시에 실행될 수 있으므로, 각 가상 머신이 필요로 하는 연산 자원을 적절히 할당하지 않으면 특정 가상 머신이 전체 시스템의 성능을 독점하거나, 반대로 자원 부족으로 응답 지연이 발생할 수 있다.
가상화 환경의 CPU 자원 관리는 단순한 시간 분할을 넘어 복잡한 정책을 수반한다. 관리자는 각 워크로드의 중요도와 성격에 따라 자원을 차별화하여 할당할 수 있다. 예를 들어, 실시간 처리가 중요한 데이터베이스 서버 가상 머신에는 최소한의 CPU 예산을 보장하고, 배치 작업을 수행하는 가상 머신에는 유휴 자원을 활용하는 방식으로 스케줄링 정책을 설정한다. 또한, CPU 선점을 통해 우선순위가 높은 작업이 즉시 자원을 사용할 수 있도록 하여 전체 시스템의 응답성을 높인다.
효율적인 관리를 위해 하이퍼바이저는 다양한 메트릭을 수집하고 모니터링한다. 주요 지표는 다음과 같다.
모니터링 지표 | 설명 |
|---|---|
CPU 사용률 | 가상 머신이 실제로 사용한 CPU 시간의 비율 |
CPU 대기 시간 | 가상 머신이 CPU 자원을 할당받기 위해 대기한 시간 |
CPU 준비 완료 시간 | 가상 머신의 작업이 실행 준비를 마치고 스케줄러에 의해 선택되기를 기다리는 시간 |
코어별 부하 분산 | 다중 코어 시스템에서 작업 부하가 코어들에 고르게 분배되는지 여부 |
이러한 지표를 바탕으로 스케줄러는 동적으로 자원을 재분배하거나, 호스트 간 가상 머신 라이브 마이그레이션을 유발하여 시스템 전반의 부하를 균형화한다. 궁극적인 목표는 물리적 자원의 최대한 활용과 동시에 모든 가상 머신의 성능 요구사항을 충족시키는 것이다.
2.2. 물리적 CPU와 가상 CPU의 관계
2.2. 물리적 CPU와 가상 CPU의 관계
물리적 CPU는 서버 하드웨어에 실제로 존재하는 처리 장치이다. 반면 가상 CPU는 하이퍼바이저에 의해 생성되고 관리되는 논리적인 처리 단위이다. 하나의 물리적 CPU 코어는 동시에 여러 개의 vCPU를 호스팅할 수 있으며, 이때 하이퍼바이저의 스케줄러가 물리적 CPU 시간을 각 vCPU에 할당하는 역할을 담당한다.
vCPU는 게스트 운영체제에게는 완전한 독립된 프로세서처럼 보이지만, 실제 실행은 물리적 CPU 자원을 공유한다. 스케줄러는 일반적으로 타임 슬라이스 방식으로 물리적 CPU 시간을 분할하여 각 vCPU에 차례로 할당한다. 이 관계는 다음 표로 요약할 수 있다.
특성 | 물리적 CPU (pCPU) | 가상 CPU (vCPU) |
|---|---|---|
본질 | 하드웨어적 실체 | 소프트웨어적 추상화 |
생성 주체 | 제조사 | 하이퍼바이저 |
자원 할당 | 고정된 물리적 자원 | 스케줄러에 의해 동적으로 분배되는 시간 |
다중화 | 단일 코어가 다수 vCPU를 호스트 | 단일 vCPU는 한 시점에 하나의 pCPU에서 실행 |
vCPU의 수가 물리적 코어 수를 초과하는 오버커밋 상황에서는 스케줄링이 더욱 복잡해진다. 모든 vCPU가 동시에 활성화되면 물리적 자원에 대한 경쟁이 발생하여 성능 저하가 일어날 수 있다[1]. 따라서 효율적인 스케줄링은 물리적 자원의 한계를 인지하면서 vCPU에게 공정하고 예측 가능한 성능을 제공하는 것을 목표로 한다.
3. 주요 스케줄링 알고리즘
3. 주요 스케줄링 알고리즘
가상화 환경에서 가상 CPU에 CPU 시간을 할당하는 방식은 하이퍼바이저의 핵심 기능 중 하나이다. 여러 가상 머신이 물리적 CPU 코어를 공유하면서도 각각 독립적인 시스템처럼 동작하게 하려면 효율적이고 공정한 스케줄링 알고리즘이 필요하다. 대표적인 알고리즘으로는 Credit Scheduler, BVT, SEDF 등이 있다.
Credit Scheduler는 Xen 하이퍼바이저에서 기본적으로 사용되는 알고리즘이다. 각 도메인(가상 머신)에 일정량의 '크레딧'을 할당하고, 실행할 때마다 이 크레딧을 소모하는 방식으로 작동한다. 스케줄러는 크레딧이 많은 도메인을 우선적으로 실행하며, 크레딧이 모두 소진된 도메인은 다른 도메인이 실행되는 동안 크레딧을 재충전받는다. 이 방식은 공정한 자원 분배를 목표로 하며, 우선순위(UNDER, OVER, BOOST)를 설정하여 워크로드의 중요도에 따라 차등적인 처리가 가능하다.
다른 주요 알고리즘들의 특징은 다음과 같이 비교할 수 있다.
알고리즘 | 주요 특징 | 일반적인 적용 환경 |
|---|---|---|
BVT (Borrowed Virtual Time) | 가상 시간 개념을 도입, 지연 시간이 짧은 워크로드에 유리 | 실시간性或 대화형 응답 시간이 중요한 환경 |
SEDF (Simple Earliest Deadline First) | 작업의 데드라인을 기준으로 스케줄링, 실시간 성능 보장에 초점 | 실시간 가상 머신 또는 미디어 처리 워크로드 |
공정한 시간 분배와 우선순위 제어에 강점 | 일반적인 서버 통합 및 다중 테넌트 클라우드 환경 |
BVT 알고리즘은 각 가상 머신에 '가상 시간'을 부여한다. 가상 머신이 실행되면 가상 시간이 증가하고, 다른 가상 머신이 실행되는 동안에는 일정 보너스(워프 값)를 받아 가상 시간의 증가가 느려진다. 이로 인해 오랫동안 실행되지 못한 가상 머신의 가상 시간은 상대적으로 작아져 우선 순위가 높아지게 되어 공정성과 응답성을 동시에 달성하려 한다. SEDF 알고리즘은 각 가상 머신이 주기적으로 필요로 하는 CPU 시간량(슬라이스)과 그 기한(데드라인)을 파라미터로 받아, 데드라인이 가장 임박한 작업을 먼저 스케줄링한다. 이는 멀티미디어 스트리밍과 같이 주기적인 CPU 버짓이 필요한 실시간 작업에 적합하다.
이러한 알고리즘의 선택은 호스팅되는 워크로드의 특성(예: 배치 처리, 대화형, 실시간)과 전체 시스템의 설계 목표(공정성 대 응답성, 처리량 대 지연 시간)에 따라 결정된다. 현대의 하이퍼바이저들은 종단 하나의 알고리즘만을 고수하기보다, 상황에 따라 다양한 정책을 선택하거나 혼합하여 사용하는 방향으로 발전하고 있다.
3.1. Credit Scheduler
3.1. Credit Scheduler
Credit Scheduler는 Xen 하이퍼바이저의 기본 CPU 스케줄링 알고리즘이다. 이 스케줄러는 각 가상 머신에 일정량의 '크레딧'을 할당하고, 이 크레딧을 소비하는 방식으로 CPU 시간을 배분하는 개념을 기반으로 한다. 모든 가상 머신은 초기에 설정된 가중치에 따라 매 30ms의 주기로 크레딧을 받는다. 스케줄러는 실행 대기 중인 가상 머신들을 크레딧 양에 따라 UNDER와 OVER 두 개의 큐로 구분하여 관리한다.
스케줄링의 핵심 메커니즘은 다음과 같다. 크레딧이 남아 있는 가상 머신(UNDER)은 항상 크레딧이 모두 소진된 가상 머신(OVER)보다 우선적으로 실행된다. UNDER 큐 내에서는 크레딧이 가장 많은 가상 머신이 가장 높은 우선순위를 가진다. 가상 머신이 CPU를 사용할 때마다 크레딧이 감소하며, 크레딧이 0이 되면 OVER 큐로 이동한다. OVER 큐의 가상 머신들은 크레딧이 다시 채워질 때까지 라운드 로빈 방식으로 최소한의 CPU 시간만을 할당받는다. 이 구조는 CPU 자원의 공정한 분배와 동시에 기아 상태를 방지하는 데 목적이 있다.
큐 상태 | 우선순위 기준 | 스케줄링 방식 | 목적 |
|---|---|---|---|
UNDER | 크레딧이 많은 순 | 크레딧 기반 우선순위 | 자원의 공정한 배분 보장 |
OVER | 진입 순서 | 라운드 로빈 | 최소 자원 보장 및 기아 상태 방지 |
Credit Scheduler는 가상 머신의 유형에 따라 다른 정책을 적용할 수 있다. 기본적으로 모든 가상 머신은 자원을 공정하게 공유하는 'Credit' 정책을 따르지만, 실시간 응답이 필요한 가상 머신은 'Credit2' 정책이나 '실시간' 정책으로 설정될 수 있다. 또한, 가상 머신이 특정 물리적 CPU 코어에 고정되는 'CPU 친화성' 설정을 통해 성능을 최적화할 수 있다. 이 스케줄러는 다중 코어 환경에서 효율적으로 동작하도록 설계되었으며, NUMA 아키텍처를 인식하여 메모리 접근 지연을 최소화하는 최적화도 포함하고 있다.
3.2. BVT (Borrowed Virtual Time)
3.2. BVT (Borrowed Virtual Time)
BVT는 가상 CPU 스케줄링에서 공정성과 낮은 지연 시간을 보장하기 위해 설계된 알고리즘이다. 이 알고리즘의 핵심 개념은 각 가상 머신에 할당된 가상 시간을 추적하고, 필요에 따라 미래의 시간을 '빌려' 실행 기회를 얻을 수 있도록 하는 것이다. 이를 통해 I/O 중심의 워크로드가 CPU를 즉시 필요로 할 때 응답성을 높일 수 있다.
알고리즘은 각 vCPU에 대해 두 가지 주요 변수를 관리한다. 하나는 실제 경과 시간에 비례하여 증가하는 가상 시간이며, 다른 하나는 가상 시간에서 차감되는 은행 계좌 값이다. 스케줄러는 항상 가장 작은 효과적 가상 시간을 가진 vCPU를 다음에 실행한다. vCPU가 실행되면 그 가상 시간은 실제 실행 시간에 비례하여 증가한다. 만약 vCPU가 I/O 작업 완료와 같이 즉시 실행해야 할 필요가 있으면, 미래의 시간 할당량을 선불로 빌려 효과적 가상 시간을 인위적으로 낮춤으로써 스케줄링 우선순위를 높인다. 이렇게 빌린 시간은 나중에 해당 vCPU의 가상 시간 증가 속도를 늦추어 상환된다.
BVT의 주요 장점은 공정한 처리량 분배와 예측 가능한 지연 시간을 동시에 제공한다는 점이다. 특히 대화형 또는 실시간성 응용 프로그램이 동작하는 가상 머신에 유리하다. 그러나 빌린 시간의 상환 메커니즘과 스케줄링 매개변수(예: 웨이크업 부스팅 값)를 적절히 조정하지 않으면, 시간을 과도하게 빌린 가상 머신이 장기적으로 다른 VM의 성능에 영향을 줄 수 있다.
이 알고리즘은 초기 Xen 하이퍼바이저의 스케줄러 중 하나로 구현되었으며, Credit Scheduler와 같은 다른 알고리즘에 비해 더 세밀한 우선순위 제어가 가능하다는 평가를 받는다. BVT의 설계 원리는 이후 다양한 가상화 플랫폼의 스케줄링 정책에 영향을 미쳤다.
3.3. SEDF (Simple Earliest Deadline First)
3.3. SEDF (Simple Earliest Deadline First)
SEDF(Simple Earliest Deadline First)는 Xen 하이퍼바이저의 초기 주요 CPU 스케줄링 알고리즘 중 하나로, 실시간 시스템의 스케줄링 이론을 가상화 환경에 적용한 것이다. 이 알고리즘은 각 가상 CPU(vCPU)에 실행 기간(Budget)과 마감 시간(Deadline)이라는 두 가지 매개변수를 할당하여 작동한다. 스케줄러는 마감 시간이 가장 빠른 vCPU를 우선적으로 실행하며, 할당된 실행 기간을 모두 소진한 vCPU는 다음 마감 시간이 돌아올 때까지 대기한다.
SEDF의 주요 동작 원리는 다음과 같은 표로 요약할 수 있다.
매개변수 | 설명 |
|---|---|
실행 기간 (s) | vCPU가 한 주기 내에서 최대로 사용할 수 있는 CPU 시간이다. |
마감 시간 (d) | 실행 기간이 시작된 후, 해당 기간 내 작업이 완료되어야 하는 절대적 시간이다. |
주기 (d - s) | 한 실행 기간이 끝나고 다음 실행 기간이 시작되기까지의 간격이다. |
예를 들어, (s=10ms, d=20ms)로 설정된 vCPU는 20ms 주기마다 10ms 동안 CPU를 사용할 권한을 보장받는다. 이는 CPU 자원에 대한 예측 가능한 할당을 제공하여, 멀티미디어 처리나 실시간 애플리케이션과 같이 일정한 처리량이 요구되는 워크로드에 적합하다.
그러나 SEDF는 상대적으로 정적인 자원 분배 방식이기 때문에 동적으로 변하는 워크로드에 대한 대응이 부족한 단점이 있었다. 또한, 우선순위가 명시적으로 정의되지 않아 중요한 시스템 도메인(Dom0)의 응답성을 보장하기 어려웠다. 이러한 한계로 인해 Xen은 이후 더 유연한 자원 분배와 가중치 기반 우선순위 조정이 가능한 Credit Scheduler를 기본 스케줄러로 채택하게 되었다.
4. 하이퍼바이저별 구현 방식
4. 하이퍼바이저별 구현 방식
Xen은 초기부터 다양한 스케줄러를 지원하는 모듈식 설계를 채택했다. 기본 스케줄러로는 Credit Scheduler가 널리 사용되며, 각 도메인(가상 머신)에 가중치와 캡을 할당하여 CPU 시간을 공정하게 분배한다. 또한 실시간 작업을 위한 SEDF 스케줄러나, BVT 스케줄러와 같은 대안도 선택할 수 있다. Xen의 스케줄링은 도메인0이 아닌 하이퍼바이저 자체에서 직접 수행되어 격리성과 제어 정밀도가 높다는 특징이 있다.
KVM은 리눅스 커널의 일부로 동작하므로, 가상 CPU 스레드는 일반적인 리눅스 프로세스로 취급되어 호스트 운영체제의 기본 스케줄러(예: CFS)의 관리를 받는다. 이 방식은 커널의 성능 개선과 새로운 스케줄링 정책을 그대로 활용할 수 있는 장점이 있다. KVM은 주로 QEMU와 함께 사용되며, vCPU 스레드의 스케줄링 정책과 CPU 친화성(CPU affinity)을 설정하여 성능을 튜닝할 수 있다.
VMware ESXi는 자체 개발한 커널 위에서 동작하며, 효율적인 자원 관리를 위한 고도로 최적화된 스케줄러를 갖추고 있다. ESXi의 스케줄러는 워크로드의 우선순위, CPU 준비 상태, 캐시 지역성 등을 복합적으로 고려한다. 특히 NUMA 아키텍처를 인지하여 메모리 접근 지연을 최소화하는 최적화와, CPU 코어의 전력 관리 상태(C-state, P-state)를 고려한 스케줄링이 두드러진 특징이다.
하이퍼바이저 | 스케줄링 수행 주체 | 주요 스케줄링 특징 |
|---|---|---|
하이퍼바이저 자체 | 모듈식 설계, Credit Scheduler가 기본, 격리성 우수 | |
호스트 리눅스 커널 스케줄러 | 커널 스케줄러(예: CFS) 재사용, 호스트 OS 스케줄링 정책 적용 | |
ESXi 커널 스케줄러 | 상용 최적화 스케줄러, NUMA 인지, 전력 관리 고려 |
4.1. Xen의 스케줄링
4.1. Xen의 스케줄링
Xen 하이퍼바이저는 도메인 기반의 가상화 아키텍처를 채택하며, 가상 CPU 스케줄링은 하이퍼바이저가 직접 제어하는 핵심 구성 요소이다. Xen은 초기부터 다양한 스케줄링 알고리즘을 모듈식으로 지원하여 환경에 맞는 정책을 선택할 수 있도록 설계되었다. 주요 스케줄러로는 Credit Scheduler, BVT (Borrowed Virtual Time), SEDF (Simple Earliest Deadline First) 등이 포함된다.
기본값으로 널리 사용되는 것은 Credit Scheduler이다. 이 스케줄러는 각 도메인(가상 머신)에 가중치(weight)와 캡(cap)을 할당하여 CPU 자원을 공정하게 분배한다. 스케줄링 단위는 가상 CPU(vCPU)이며, 물리적 CPU 코어에서 실행될 vCPU를 선택하기 위해 우선순위 큐를 사용한다. 자원 분배의 공정성과 응답성을 동시에 고려하는 것이 특징이다.
다른 알고리즘들도 특정 목적에 맞게 활용된다. SEDF 스케줄러는 실시간성 작업에 적합하도록 각 도메인에 CPU 예산과 마감 시간을 할당한다. BVT 스케줄러는 대화형 응용 프로그램의 응답성을 개선하기 위해 가상 시간 개념을 도입하여 대기 중인 작업에 자원을 빌려주는 방식으로 동작한다.
Xen의 스케줄링 성능은 다양한 요소에 영향을 받는다. 다음 표는 주요 스케줄링 파라미터와 영향을 요약한 것이다.
파라미터/특성 | 설명 | 주요 영향 |
|---|---|---|
가중치(weight) | 도메인 간 상대적 CPU 자원 비율 | 처리량 배분 |
캡(cap) | 도메인이 사용할 수 있는 최대 물리적 CPU 비율 | 자원 격리 |
vCPU 개수 | 도메인에 할당된 가상 CPU 수 | 병렬 처리 능력 |
피닝(pinning) | vCPU를 특정 물리적 CPU 코어에 고정 | 성능 예측성, NUMA 지역성 |
이러한 모듈식 설계 덕분에 Xen은 범용 서버 가상화부터 실시간 임베디드 시스템에 이르기까지 다양한 워크로드에 적용될 수 있다.
4.2. KVM/QEMU의 스케줄링
4.2. KVM/QEMU의 스케줄링
KVM은 리눅스 커널에 통합된 하이퍼바이저로, 리눅스 커널의 기존 프로세스 스케줄러를 활용하여 가상 CPU를 스케줄링한다. 기본적으로 각 가상 머신은 리눅스의 하나의 프로세스로 간주되며, 그 안에서 실행되는 vCPU 스레드는 일반적인 사용자 공간 프로세스 스레드와 마찬가지로 커널의 CFS 스케줄러에 의해 관리된다. QEMU는 장치 에뮬레이션을 담당하며, KVM과 결합되어 완전한 가상화 솔루션을 제공한다.
KVM/QEMU 환경에서의 스케줄링 성능을 최적화하기 위해 여러 가지 기법이 사용된다. 대표적으로 CPU 고정을 통해 특정 vCPU 스레드를 특정 물리적 CPU 코어에 할당하여 캐시 지역성을 높이고 컨텍스트 스위칭 오버헤드를 줄일 수 있다. 또한, NUMA 인식 스케줄링은 vCPU와 메모리를 동일한 NUMA 노드에 배치하여 메모리 접근 지연을 최소화한다. 스케줄러의 절전 동작이 성능에 영향을 미칠 수 있어, 성능 중심의 워크로드에서는 이를 조정하기도 한다.
다음은 KVM/QEMU에서 주로 사용되는 주요 스케줄링 관련 매개변수와 도구를 정리한 표이다.
범주 | 도구/매개변수 | 주요 기능 |
|---|---|---|
CPU 할당 |
| 프로세스/스레드를 특정 CPU 코어나 NUMA 노드에 고정 |
스케줄러 정책 |
| 프로세스의 스케줄링 정책(예: SCHED_FIFO, SCHED_RR) 및 우선순위 설정 |
KVM 모듈 매개변수 |
| |
QEMU 명령줄 옵션 |
| 가상 CPU 개수 지정 및 NUMA 토폴로지 구성 |
이러한 접근 방식 덕분에 KVM은 호스트 리눅스 시스템의 강력하고 지속적으로 발전하는 스케줄링 인프라를 그대로 활용할 수 있으며, 광범위한 튜닝 옵션을 통해 다양한 워크로드에 맞게 성능을 세밀하게 조정할 수 있다.
4.3. VMware ESXi의 스케줄링
4.3. VMware ESXi의 스케줄링
VMware ESXi는 자체 개발한 가상 머신 모니터인 VMkernel을 기반으로 동작하며, 효율적인 가상 CPU 스케줄링을 위한 고유의 알고리즘을 구현한다. 핵심 스케줄러는 비례 공유 스케줄링 원칙에 기반한 ESXi 스케줄러 (또는 CFS, Co-scheduling Friendly Scheduler로 불림)이다. 이 스케줄러는 각 가상 머신에 할당된 CPU 자원의 비율(예: CPU 공유, 예약, 제한 설정)을 준수하면서도, 물리적 CPU 코어 간의 부하를 균형 있게 분배하는 것을 목표로 한다.
ESXi의 스케줄링은 크게 두 가지 주요 메커니즘으로 구성된다. 첫째는 CPU 공유(Shares), 예약(Reservation), 상한(Limit)을 통한 자원 할당 제어이다. 관리자는 이를 통해 각 VM에 최소 보장 성능을 설정하거나 상대적 중요도를 부여할 수 있다. 둘째는 코어별 선점형 스케줄링과 릴랙스드 코-스케줄링이다. 멀티 vCPU를 가진 VM의 경우, 모든 vCPU 스레드가 동시에 실행될 수 있는 물리적 코어가 확보되지 않으면 성능 저하가 발생할 수 있다. ESXi는 이를 완화하기 위해 가능한 한 vCPU들을 동시에 스케줄링하려 시도하지만(코-스케줄링), 시스템 부하가 높을 경우 일부 vCPU의 실행을 지연시키는 릴랙스드 방식을 채택하여 전체 시스템 효율성을 높인다[3].
다양한 워크로드에 대응하기 위해 ESXi는 스케줄러의 동작을 세부 조정할 수 있는 기능을 제공한다. 예를 들어, 대화형 응용 프로그램이 많은 VM에는 낮은 준비 대기 지연을 제공하는 것이 유리하다. 이를 위해 ESXi는 다음과 같은 스케줄링 관련 설정을 지원한다.
설정 항목 | 설명 |
|---|---|
CPU 공유(Shares) | VM 간 상대적 중요도. High/Normal/Low 값 또는 사용자 지정 값으로 설정한다. |
CPU 예약(Reservation) | VM에 보장되는 최소 CPU 성능(MHz 단위). |
CPU 상한(Limit) | VM이 사용할 수 있는 최대 CPU 성능(MHz 단위). 무제한(Unlimited)으로 설정 가능하다. |
준비 대기 지연(CPU Ready Time) | VM의 vCPU가 실행되기를 기다린 시간으로, 스케줄링 경합의 주요 지표가 된다. |
또한, NUMA 아키텍처를 가진 서버에서의 성능을 최적화하기 위해 NUMA 인식 스케줄링을 자동으로 수행한다. VM의 메모리와 vCPU를 가능한 한 동일한 NUMA 노드에 배치하여, 원격 메모리 접근으로 인한 지연을 최소화한다.
5. 성능 최적화 기법
5. 성능 최적화 기법
성능 최적화를 위해 가상 CPU 스케줄러는 워크로드의 특성을 정확히 파악하고 이에 맞는 정책을 적용한다. 예를 들어, 대화형 워크로드는 짧은 응답 시간이 중요하므로, Credit Scheduler에서는 높은 우선순위를 부여하여 자주 실행 기회를 준다. 반면, 배치 처리 작업은 처리량이 중요하므로, CPU 시간을 장기간 안정적으로 할당하는 정책이 유리하다. 일부 하이퍼바이저는 워크로드를 자동으로 분류하거나 관리자가 직접 태그를 지정할 수 있는 기능을 제공하여 스케줄러의 의사 결정을 돕는다.
CPU 선점은 다른 가상 머신이 긴급한 작업을 처리해야 할 때, 현재 실행 중인 가상 CPU를 중단시키는 메커니즘이다. 이를 통해 공정성과 응답성을 보장한다. 우선순위 조정은 각 가상 머신에 할당된 가중치나 크레딧 값을 동적으로 변경하는 것을 포함한다. 시스템 부하가 변하거나 서비스 수준 계약(SLA) 요구사항이 변경될 때, 관리자는 우선순위를 재조정하여 자원 분배를 최적화할 수 있다.
다음은 주요 워크로드 유형과 권장되는 스케줄링 접근 방식을 요약한 표이다.
워크로드 유형 | 주요 특징 | 권장 스케줄링 접근법 |
|---|---|---|
대화형 워크로드 (예: 데스크톱 가상화) | 짧은 지연 시간, 예측 가능한 응답성 | 높은 우선순위, 빈번한 선점 가능 |
배치 처리 (예: 과학 연산) | 높은 처리량, 지연 시간에 덜 민감 | 안정적이고 장기적인 CPU 시간 할당 |
엄격한 데드라인 준수 | SEDF와 같은 데드라인 기반 알고리즘 | |
입출력 집약적 워크로드 | CPU 대기 시간이 많음 | I/O 완료 시 빠른 재스케줄링 |
이러한 기법들을 효과적으로 결합하면, 전체 시스템의 자원 활용도를 높이면서도 각 가상 머신의 성능 요구사항을 충족시킬 수 있다.
5.1. 워크로드 특성에 따른 스케줄링 정책
5.1. 워크로드 특성에 따른 스케줄링 정책
가상 환경의 효율성을 극대화하기 위해서는 실행되는 워크로드의 특성을 정확히 파악하고 이에 맞는 스케줄링 정책을 적용하는 것이 중요하다. 일반적으로 워크로드는 대화형, 배치 처리, 실시간, 데이터베이스 서버 등으로 분류되며, 각 유형은 서로 다른 CPU 자원 요구 패턴을 보인다.
예를 들어, 데스크톱 가상화 환경에서의 사용자 세션은 짧은 대화형 작업이 많아 낮은 지연 시간이 필수적이다. 반면, 과학 계산이나 비디오 렌더링과 같은 배치 처리 작업은 처리량을 최대화하는 것이 더 중요하다. 따라서 하이퍼바이저는 워크로드 유형을 식별하거나 관리자가 명시적으로 지정한 정책에 따라 스케줄링 방식을 동적으로 조정한다. 일부 시스템에서는 워크로드의 CPU 사용 패턴(예: I/O 대기 시간 대비 실제 연산 시간)을 실시간으로 모니터링하여 이를 스케줄링 결정에 반영하기도 한다.
다양한 워크로드 특성에 대응하기 위해 다음과 같은 정책들이 활용된다.
워크로드 유형 | 주요 특성 | 권장 스케줄링 접근법 |
|---|---|---|
대화형 (예: VDI) | 짧은 버스트 형태의 CPU 사용, 낮은 지연 시간 요구 | 높은 우선순위, 짧은 시간 할당량, 빈번한 선점 가능 |
배치 처리 (예: HPC) | 장시간 지속적 CPU 사용, 처리량 최대화 목표 | 공정한 시간 할당, 선점 최소화, 큰 시간 슬라이스 |
실시간 (예: 통신 앱) | 엄격한 데드라인 준수, 결정론적 응답 시간 | 데드라인 기반 스케줄링(예: SEDF), 독점적 CPU 할당 가능 |
서버 (예: DB, 웹) | 혼합형(I/O 바운드 & CPU 바운드), 변동성 있음 | 우선순위 조정 가능, I/O 완료 시 부스트 적용 |
이러한 정책 적용은 단일 가상 CPU 수준뿐만 아니라, 관련된 여러 가상 머신을 그룹으로 관리하는 리소스 풀 개념을 통해 이루어지기도 한다. 이를 통해 특정 비즈니스 단위나 서비스 티어에 따라 차등화된 자원 보장과 제한을 구현할 수 있다.
5.2. CPU 선점과 우선순위 조정
5.2. CPU 선점과 우선순위 조정
가상 CPU 스케줄링에서 선점은 실행 중인 vCPU를 일시 중단하고 다른 vCPU에 CPU 자원을 할당하는 메커니즘을 의미한다. 이는 하이퍼바이저가 물리적 CPU 시간을 여러 가상 머신에 공정하고 효율적으로 분배할 수 있게 하는 핵심 기능이다. 선점이 없으면 하나의 vCPU가 장시간 CPU를 독점하여 다른 가상 머신의 응답성을 떨어뜨리거나 성능을 저하시킬 수 있다. 대부분의 현대 하이퍼바이저는 시간 할당량 기반의 선점형 스케줄링을 사용하여 이러한 문제를 방지한다.
우선순위 조정은 각 vCPU나 가상 머신에 부여되는 상대적 중요도를 결정하여 스케줄링 결정에 영향을 미친다. 높은 우선순위를 가진 워크로드는 일반적으로 더 자주 또는 더 긴 시간 동안 CPU를 할당받는다. 우선순위는 정적으로 설정되거나, Credit Scheduler와 같은 알고리즘에서처럼 워크로드의 실제 사용량과 크레딧 잔고에 따라 동적으로 변할 수 있다. 예를 들어, 대화형 작업이나 낮은 지연 시간이 요구되는 애플리케이션을 실행하는 가상 머신은 높은 우선순위를 부여받아 더 나은 응답성을 보장받을 수 있다.
우선순위 수준 | 일반적인 용도 | 스케줄링 영향 |
|---|---|---|
높음(High) | 실시간 애플리케이션, 대화형 작업 | 더 짧은 대기 시간, 더 자주 또는 선점적으로 실행 |
보통(Normal) | 일반적인 서버 워크로드 | 공정한 시간 할당량 내에서 스케줄링 |
낮음(Low) | 배치 작업, 백그라운드 처리 | 유휴 CPU 자원이 있을 때 실행 |
선점과 우선순위 조정은 함께 작동하여 성능 목표를 달성한다. 하이퍼바이저는 우선순위가 높은 vCPU가 실행 준비가 되면, 현재 실행 중인 낮은 우선순위의 vCPU를 선점하여 자원을 재할당할 수 있다. 또한, NUMA 아키텍처에서는 메모리 지역성을 고려하여 특정 물리적 CPU 코어에 vCPU를 고정하는 CPU 친화성 설정과 우선순위 정책을 결합하여 성능을 최적화하기도 한다. 이러한 조정은 가상화 환경 전체의 처리량, 응답 시간, 자원 활용률 간의 균형을 맞추는 데 필수적이다.
6. 도전 과제와 최신 동향
6. 도전 과제와 최신 동향
가상 CPU 스케줄링은 다중 코어 프로세서와 NUMA 아키텍처의 보편화로 새로운 도전에 직면한다. 물리적 코어 수가 증가함에 따라, 여러 vCPU를 효율적으로 배치하고 실행 순서를 결정하는 문제가 복잡해진다. 특히 NUMA 시스템에서는 vCPU와 메모리가 서로 다른 노드에 위치할 경우 성능 저하가 발생할 수 있다. 이를 해결하기 위해 최신 하이퍼바이저는 vCPU를 동일한 물리적 코어나 인접한 코어에 묶는 CPU 친화성 설정과, 메모리 할당을 고려한 NUMA 인식 스케줄링 정책을 도입한다.
컨테이너 기술의 부상은 또 다른 통합 과제를 제시한다. 가상 머신과 컨테이너가 혼재된 환경에서 CPU 자원을 공정하게 분배하고 격리하는 메커니즘이 필요해졌다. 일부 솔루션은 cgroups와 같은 리눅스 커널 기능을 활용해 하이퍼바이저 수준의 스케줄링과 컨테이너 오케스트레이션 플랫폼의 스케줄러를 조율하려는 시도를 하고 있다.
최근 동향은 인공 지능과 머신 러닝을 활용한 예측 스케줄링으로 발전하고 있다. 과거 워크로드 패턴을 분석하여 vCPU의 자원 요구량을 미리 예측하고, 이를 바탕으로 스케줄링 결정을 내리는 연구가 활발하다. 또한, 저지연이 중요한 실시간 애플리케이션을 지원하기 위해, 스케줄링 지연 시간을 마이크로초 단위로 보장하는 기술도 주목받고 있다.
도전 과제 | 설명 | 대응 방향 또는 기술 |
|---|---|---|
다중 코어/NUMA | 코어 수 증가로 인한 스케줄링 복잡도 상승, 원격 메모리 접근 지연 | CPU 친화성, NUMA 인식 스케줄링, 자원 묶음(pinning) |
컨테이너 통합 | VM과 컨테이너가 공존하는 하이브리드 환경의 효율적 자원 관리 | 통합 자원 관리 계층, cgroups와의 연동 |
성능 예측 및 최적화 | 다양한 워크로드에 대한 동적 적응 | 머신 러닝 기반 워크로드 예측, 적응형 스케줄링 알고리즘 |
실시간성 보장 | 마이크로초 단위의 저지연 요구사항 대응 | 결정론적 스케줄링, 선점 지연 최소화 기법 |
6.1. 다중 코어 및 NUMA 아키텍처
6.1. 다중 코어 및 NUMA 아키텍처
다중 코어 및 NUMA 아키텍처는 현대 하이퍼바이저의 가상 CPU 스케줄링에 중요한 도전 과제를 제기한다. 초기 가상화 환경은 단일 소켓의 단일 또는 소수 코어를 가정했지만, 현재 서버 시스템은 수십 개의 코어를 가진 다중 소켓 NUMA 노드로 구성되는 경우가 일반적이다. 이러한 환경에서 스케줄러는 단순히 가상 CPU를 가용한 물리적 코어에 할당하는 것을 넘어, 메모리 접근 지연 시간과 CPU 캐시 효율성을 고려해야 한다.
NUMA 아키텍처에서는 프로세서가 자신의 로컬 메모리에 접근할 때가 원격 메모리에 접근할 때보다 훨씬 빠르다. 따라서 스케줄러는 가능한 한 하나의 가상 머신에 할당된 가상 CPU들이 동일한 NUMA 노드에서 실행되도록 하고, 해당 가상 머신의 메모리도 동일 노드에 상주하도록 배치하는 것이 성능에 유리하다. 이를 위해 현대 하이퍼바이저는 CPU 친화성 설정과 메모리 친화성 정책을 결합한 NUMA 인식 스케줄링을 구현한다.
다중 코어 환경에서의 주요 이슈는 코어 간 통신 오버헤드와 캐시 일관성 유지이다. 하나의 가상 머신 내 여러 가상 CPU가 서로 다른 물리적 코어에서 실행될 때, 스케줄러는 이들이 빈번하게 통신해야 하는 워크로드인지 여부를 판단하기 어렵다. 성능 저하를 완화하기 위해 코어 파킹이나 동적 빈도 스케일링 같은 기법과 연동하여, 워크로드 요구에 맞게 코어를 온라인/오프라인 전환하거나 클럭 속도를 조정하기도 한다.
아키텍처 특성 | 스케줄링 도전 과제 | 주요 최적화 기법 |
|---|---|---|
다중 코어 | 캐시 일관성 유지 오버헤드, 코어 간 부하 분산 | CPU 친화성, 캐시 인식 스케줄링, 코어 파킹 |
NUMA | 원격 메모리 접근으로 인한 지연 증가 | NUMA 노드 친화성, 메모리 배치 최적화, vCPU-메모리 동일 노드 배치 |
결과적으로, 다중 코어 및 NUMA 시스템을 위한 스케줄링은 단순한 CPU 시간 분배를 넘어, 시스템의 전체적인 메모리 계층 구조와 상호 연결망 토폴로지를 이해하고 최적의 자원 배치를 결정하는 복합적인 문제로 진화했다.
6.2. 컨테이너 환경과의 통합
6.2. 컨테이너 환경과의 통합
가상 CPU 스케줄링은 전통적으로 하이퍼바이저 기반의 가상 머신 관리에 초점을 맞추었으나, 컨테이너 기술의 부상으로 두 환경의 통합 및 조화에 대한 요구가 증가하고 있다. 컨테이너는 가상 머신보다 가볍고 빠르게 애플리케이션을 격리하지만, 기본 호스트 운영체제의 커널을 공유한다. 이로 인해 컨테이너 내 프로세스의 CPU 스케줄링은 호스트 OS의 스케줄러(예: CFS (Completely Fair Scheduler))에 의해 직접 관리된다. 반면, 가상 머신 내부의 게스트 OS는 가상 CPU를 통해 하이퍼바이저의 스케줄러에 의해 간접적으로 관리받는다. 이 구조적 차이는 가상화 환경과 컨테이너 환경이 혼재된 하이브리드 인프라에서 효율적인 자원 통합 관리를 주요 도전 과제로 만들었다.
통합을 위한 접근 방식은 크게 두 가지로 나뉜다. 첫째, Kubernetes와 같은 컨테이너 오케스트레이션 플랫폼이 가상 머신을 일급 객체로 관리할 수 있도록 확장하는 것이다. 예를 들어, KubeVirt 프로젝트는 쿠버네티스 클러스터 내에서 가상 머신을 컨테이너와 동등한 파드로 실행할 수 있게 하여, 동일한 인터페이스로 배포와 관리를 가능하게 한다. 둘째, 하이퍼바이저 수준에서 컨테이너를 직접 지원하는 방식이다. 일부 하이퍼바이저는 컨테이너 워크로드를 특수한 형태의 가상 머신으로 감싸 실행하여, 기존의 가상 CPU 스케줄링 정책을 적용하면서도 컨테이너의 빠른 시작 시간을 유지하려고 시도한다.
이러한 통합은 성능과 관리 효율성 측면에서 이점을 제공하지만, 스케줄링의 복잡성을 증가시킨다. 관리자는 이기종 워크로드(가상 머신의 지속적 서비스와 컨테이너의 단일 작업)에 대한 공정성과 성능 격리를 동시에 보장해야 한다. 또한, 다중 테넌트 환경에서 서로 다른 SLA(서비스 수준 계약)를 가진 워크로드를 어떻게 우선순위에 따라 스케줄링할지에 대한 정책 수립이 필요하다. 최근 연구 및 개발 동향은 머신러닝을 활용한 예측 스케줄링이나 워크로드 프로파일에 기반한 동적 스케줄링 정책 할당 등 지능형 자원 관리 방향으로 진화하고 있다.
